package com.xzq.erp.ai.dto;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.ai.chat.messages.*;

import java.util.List;
import java.util.Map;

@AllArgsConstructor
@NoArgsConstructor
@Data
public class Msg {

    // {
    //      "messageType" : "ASSISTANT",
    //      "metadata" : {
    //        "role" : "ASSISTANT",
    //        "messageType" : "ASSISTANT",
    //        "refusal" : "",
    //        "finishReason" : "STOP",
    //        "annotations" : [ ],
    //        "index" : 0,
    //        "id" : "chatcmpl-14d1b68c-0924-9329-befa-8797a1d8d029"
    //      },
    //      "toolCalls" : [ ],
    //      "media" : [ ],
    //      "text" : "您好！我是智能ERP助手，专为企业资源规划系统提供支持。我可以帮助您处理客户管理、订单处理、销售机会评估以及售后服务等任务。无论是查询客户信息、跟踪订单状态，还是制定销售策略和解决售后问题，我都可以为您提供专业且高效的协助。\n\n如果您有任何具体需求或问题，请随时告诉我，我会尽力为您解答并提供支持！ 😊"
    //    }

    // 消息类型
    // USER("user"), 用户提示词
    // ASSISTANT("assistant"), 大模型响应
    // SYSTEM("system"), 系统提示词
    // TOOL("tool"); 方法调用响应
    MessageType messageType;

    // 消息内容
    String text;

    //  元数据
    Map<String,Object>  metadata;

    public Msg(Message message){
        this.messageType = message.getMessageType();
        this.text = message.getText();
        this.metadata = message.getMetadata();
    }

    public Message toMessage(){
        return switch (this.messageType){
            case SYSTEM -> new SystemMessage(this.text);
            case USER -> UserMessage.builder()
                            .text(this.text)
                            .media(List.of())
                            .metadata(this.metadata)
                            .build();
            // 文本提示词 元数据 工具返回响应 Media
            case ASSISTANT -> new AssistantMessage(text,this.metadata, List.of(),List.of());
            default -> throw new IllegalArgumentException("Unsupported message type: " + messageType);
        };
    }
}
